// 文件名：flat_set_feature_flags.cpp
// 目的：使用 std::flat_set 管理功能开关（feature flags），支持高效存在性检查与按前缀段的顺序遍历。
// 背景：
//   - flat_set 是“有序向量 + 二分查找”的平铺容器：查找 O(log N)、遍历/缓存友好；插入/删除 O(N) 移动代价。
//   - 适合“读多写少”的配置/白名单/特性开关等场景（启动期建表，运行期频繁查询）。
// 要点：
//   - 直接以初始化列表构建有序集合；
//   - contains(key)：O(log N) 判断是否存在；
//   - lower_bound(prefix)：返回第一个不小于 prefix 的迭代器，可用于按字典序从某前缀起遍历；
//   - 透明比较（此例未显式指定，但查找参数为 string_view 在多数实现中可与 std::string 比较）。
// 注意：
//   - #include <flat_set> 需要编译器/标准库支持（C++23 或供应商扩展；可用 Boost.Container 的 flat_set 替代）。
//   - 如果需要异构查找的零拷贝保障，建议声明为 std::flat_set<std::string, std::less<>>。
#include <flat_set>
#include <iostream>
#include <string_view>

int main() {
    // 启动期一次性构建
    std::flat_set<std::string> featureFlags = {
        "beta.new-dashboard",
        "cache.read-through",
        "logging.verbose",
        "security.strict-mode",
        "ux.dark-theme"
    };

    // 存在性检查（支持 string_view）
    auto hasFlag = [&](std::string_view key) {
        return featureFlags.contains(key);
    };

    std::cout << std::boolalpha;
    std::cout << "Has cache.read-through? " << hasFlag("cache.read-through") << '\n';
    std::cout << "Has search.boost?      " << hasFlag("search.boost") << '\n';

    // 从某前缀（字典序）起顺序遍历
    std::cout << "Flags >= \"logging.\":\n";
    for (auto it = featureFlags.lower_bound("logging."); it != featureFlags.end(); ++it) {
        std::cout << "  " << *it << '\n';
    }

    return 0;
}